package pers.twf.twfrpc.springboot.starter.bootstrap;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import pers.twf.twfRpc.RpcApplication;
import pers.twf.twfRpc.config.RpcConfig;
import pers.twf.twfRpc.server.tcp.VertxTcpServer;
import pers.twf.twfrpc.springboot.starter.annotation.EnableRpc;

/**
 * RPC框架启动类
 * 实现 ImportBeanDefinitionRegistrar 以获取项目的注解和注解属性
 */
@Slf4j
public class RpcInitBootstrap implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        //获取EnableRpc注解的属性
        boolean needServer = (boolean) importingClassMetadata.getAnnotationAttributes(EnableRpc.class.getName())
                .get("needServer");
        RpcApplication.init();

        RpcConfig rpcConfig = RpcApplication.getRpcConfig();

        if (needServer) {
            VertxTcpServer vertxTcpServer = new VertxTcpServer();
            vertxTcpServer.doStart(rpcConfig.getServicePort());
        }else {
            log.info("不启动 Server");
        }

    }
}
